#include <iostream>
#include <thread>
#include <future>

// 通过在线程中对promise对象设置数据，\
   其他线程可以通过future获取数据，实现获取异步任务的执行结果
void add(int num1, int num2, std::promise<int> &prom) 
{
    std::this_thread::sleep_for(std::chrono::seconds(3));
    prom.set_value(num1 + num2);
    return;
}

int main()
{
    std::promise<int> prom;
    // 将prom与fut进行关联，返回一个future对象
    std::future<int> fut = prom.get_future();  

    std::thread thr(add, 1, 2, std::ref(prom));
    auto res = fut.get();       // 与异步任务的执行结果同步

    std::cout << res << "\n";
    thr.join();
    return 0;
}